/** Fichier qui implémente une classe permettant de générer des nombres
 * aléatoires.
 *
 * Implémentation de la classe Aleatoire.
 *
 * @file Aleatoire.cpp
 *
 * @author Johan "Solo" Luisier
 * @date 21 Mai 2010
 */
#include "Aleatoire.hpp"

using namespace boost;

lagged_fibonacci44497 Aleatoire::GenerateurBase( 12345 );

/**
 * Constructeur par défaut. On initialise ici les champs et le
 * générateur de nombre aléatoire. La version par défaut génère des
 * nombre dans l'intervalle \f$ \left[ 0, 1 \right] \f$.
 *
 * @param min borne inférieure de l'intervalle désiré.
 * @param max borne supérieure de l'intervalle désiré.
 */
Aleatoire::Aleatoire(const double& min, const double& max)
  : Minimum( min ), Maximum( max ), Uniforme( min, max ),
    Generateur( GenerateurBase, Uniforme )
{}

/**
 * Le destructeur n'a rien de spécial à faire.
 */
Aleatoire::~Aleatoire()
{}

/**
 * Renvoie un nombre aléatoire dans l'intervalle voulu, avec une
 * distribution gaussienne.
 *
 * @return un nombre aléatoire.
 */
double Aleatoire::operator()()
{
  return Generateur();
}

/**
 * Permet de récupérer un nombre alétoire dans l'intervalle \f$ \left[
 * 0, 1 \right] \f$, avec une loi de probabilité uniforme.
 *
 * @return un nombre aléatoire dans \f$ \left[ 0, 1 \right] \f$.
 */
double Aleatoire::uniforme()
{
  return GenerateurBase();
}

/**
 * Permet de récupérer la borne inférieure de notre distribution.
 *
 * @return une référence constante sur Minimum.
 */
const double& Aleatoire::minimum() const
{
  return Minimum;
}

/**
 * Permet de récupérer la borne supérieure de notre distribution.
 *
 * @return une référence constante sur Maximum.
 */
const double& Aleatoire::maximum() const
{
  return Maximum;
}
